
#include <QMessageBox>

#include "Agence.h"
#include "Relation.h"
#include "TrueLove.h"
#include "CompteRenduRDV.h"
#include "RechercheCompatibilite.h"

CompteRenduRDV::CompteRenduRDV(QWidget *parent)
: QMainWindow(parent), Ui_CompteRenduRDV()
{
	setupUi(this);
	rdvs = RendezVous::GetRendezVous();

	for(int i=0; i<rdvs.size(); i++)
	{
		RendezVous rdv = rdvs.at(i);
		Compatibilite c = rdv.GetCompatibilite();
		TrueLoveClient c1 = c.GetClient1();
		TrueLoveClient c2 = c.GetClient2();
		comboBox->addItem(QString("%1 %2 & %3 %4").arg(c1.GetPrenom()).arg(c1.GetNom())
				.arg(c2.GetPrenom()).arg(c2.GetNom()));
	}
}

void CompteRenduRDV::closeEvent(QCloseEvent *event)
{
	retourAccueil();
}

void CompteRenduRDV::updateClientsUi(int index)
{
	RendezVous rdv = rdvs.at(index);
	Compatibilite c = rdv.GetCompatibilite();
	TrueLoveClient c1 = c.GetClient1();
	TrueLoveClient c2 = c.GetClient2();

	groupBoxClient1->setTitle(QString("Points pour %1:").arg(c2.GetPrenom()));
	groupBoxClient2->setTitle(QString("Points pour %1:").arg(c1.GetPrenom()));
	
	checkBoxClient1->setText(QString("%1 souhaite revoir %2").arg(c1.GetPrenom()).arg(c2.GetPrenom()));
	checkBoxClient2->setText(QString("%1 souhaite revoir %2").arg(c2.GetPrenom()).arg(c1.GetPrenom()));

	horizontalSlider_charmePersonne->setValue(0);
	horizontalSlider_humourPersonne->setValue(0);
	horizontalSlider_conversationPersonne->setValue(0);
	horizontalSlider_intelligencePersonne->setValue(0);
	horizontalSlider_gentillessePersonne->setValue(0);
	horizontalSlider_apparencePersonne->setValue(0);

	horizontalSlider_charmePersonne_2->setValue(0);
	horizontalSlider_humourPersonne_2->setValue(0);
	horizontalSlider_conversationPersonne_2->setValue(0);
	horizontalSlider_intelligencePersonne_2->setValue(0);
	horizontalSlider_gentillessePersonne_2->setValue(0);
	horizontalSlider_apparencePersonne_2->setValue(0);

	checkBoxClient1->setChecked(false);
	checkBoxClient2->setChecked(false);
}

void CompteRenduRDV::EvaluerRendezVous()
{
	RendezVous rdv = rdvs.at(comboBox->currentIndex());
	Compatibilite c = rdv.GetCompatibilite();
	TrueLoveClient t1 = c.GetClient1(), t2 = c.GetClient2();
	StatistiquesClient c1(t1.GetId());
	StatistiquesClient c2(t2.GetId());

	QString errors = "<p><b>Il y a des erreurs dans le formulaire:</b></p></ul>";
	bool isError = false;

	int pointsClient1 = lcdNumber_apparencePersonne->intValue() + lcdNumber_charmePersonne->intValue()
		+ lcdNumber_humourPersonne->intValue() + lcdNumber_conversationPersonne->intValue()
		+ lcdNumber_intelligencePersonne->intValue() + lcdNumber_gentillessePersonne->intValue();	

	int pointsClient2 = lcdNumber_apparencePersonne_2->intValue() + lcdNumber_charmePersonne_2->intValue()
		+ lcdNumber_humourPersonne_2->intValue() + lcdNumber_conversationPersonne_2->intValue()
		+ lcdNumber_intelligencePersonne_2->intValue() + lcdNumber_gentillessePersonne_2->intValue();	

	
	if(pointsClient1 < MIN_POINTS_RDV || pointsClient2 < MIN_POINTS_RDV)
	{
		isError = true;
		errors.append("<li>Il faut attribuer au minimum 5 points par client.</li>");
	}
		
	if(pointsClient1 > MAX_POINTS_RDV || pointsClient2 > MAX_POINTS_RDV)
	{
		isError = true;
		errors.append("<li>Un total de 15 points maximum est attribuable par client.</li>");
	}
		
	if(isError)
	{
		errors.append("</ul>");
		QMessageBox::critical(this, "TrueLove | ERREUR", errors);
	}
	else
	{
		c1.SetMoyApparence(lcdNumber_apparencePersonne_2->intValue());
		c1.SetMoyHumour(lcdNumber_humourPersonne_2->intValue());
		c1.SetMoyCharme(lcdNumber_charmePersonne_2->intValue());
		c1.SetMoyIntelligence(lcdNumber_intelligencePersonne_2->intValue());
		c1.SetMoyConversation(lcdNumber_conversationPersonne_2->intValue());
		c1.SetMoyGentillesse(lcdNumber_gentillessePersonne_2->intValue());
		c1.SetNbTotalRendezVous(1);

		c2.SetMoyApparence(lcdNumber_apparencePersonne->intValue());
		c2.SetMoyHumour(lcdNumber_humourPersonne->intValue());
		c2.SetMoyCharme(lcdNumber_charmePersonne->intValue());
		c2.SetMoyIntelligence(lcdNumber_intelligencePersonne->intValue());
		c2.SetMoyConversation(lcdNumber_conversationPersonne->intValue());
		c2.SetMoyGentillesse(lcdNumber_gentillessePersonne->intValue());
		c2.SetNbTotalRendezVous(1);

		Agence a = Agence::Get();
		a.SetNbRendezVousTotal(a.GetNbRendezVousTotal() + 1);

		if(checkBoxClient1->isChecked() && checkBoxClient2->isChecked())
		{
			a.SetNbRendezVousSucces(a.GetNbRendezVousSucces() + 1);
			Relation r(t1.GetId(), t2.GetId());
			r.SetMarried(false);
			Relation::SaveRelation(r);			// sauvegarde de la relation
			
	
			QMessageBox::information(this, "TrueLove | Nouvelle relation", 
				"<i>F&eacute;licitations! Les deux partenaires souhaitant se revoir, une nouvelle relation vient d'&ecirc;tre cr&eacute;&eacute;e.</i>");	
		} 

		if(comboBox->count() == 1)
		{
			QMessageBox::information(this, "TrueLove | Fin des compte-rendus", 
				QString("<i>Il n'y a plus de compte-rendus de rendez-vous &agrave; &eacute;diter. Vous allez &ecirc;tre redirig&eacute; vers l'accueil.</i>"));
			
			retourAccueil();
		}
		else
		{
			comboBox->removeItem(comboBox->currentIndex());
		}

		// suppression du rendez-vous
		for(int i=0; i<rdvs.size(); i++)
		{
			RendezVous rr = rdvs.at(i);
			Compatibilite cc = rr.GetCompatibilite();
			TrueLoveClient tlc1 = cc.GetClient1(), tlc2 = cc.GetClient2();
			if((tlc1.GetId() == t1.GetId() && tlc2.GetId() == t2.GetId()) 
				|| (tlc1.GetId() == t2.GetId() && tlc2.GetId() == t1.GetId()))
				rdvs.removeAt(i);
		}
		
		RechercheCompatibilite::SaveRendezVous(rdvs);	// mise à jour dans le fichier XML
		Agence::Save(a);

		// MAJ des statistiques des clients:
		UpdateClientStats(c1);
		UpdateClientStats(c2);
	}
}

void CompteRenduRDV::UpdateClientStats(StatistiquesClient c)
{
	QList<StatistiquesClient> stats = StatistiquesClient::GetStatistiquesClients();
	bool found = false;

	for(int i=0; i<stats.size(); i++)
	{
		StatistiquesClient s = stats.at(i);
		if(s.GetIdClient() == c.GetIdClient())
		{
			found = true;
			c.SetMoyApparence(c.GetMoyApparence() + s.GetMoyApparence());
			c.SetMoyHumour(c.GetMoyHumour() + s.GetMoyHumour());
			c.SetMoyCharme(c.GetMoyCharme() + s.GetMoyCharme());
			c.SetMoyIntelligence(c.GetMoyIntelligence() + s.GetMoyIntelligence());
			c.SetMoyConversation(c.GetMoyConversation() + s.GetMoyConversation());
			c.SetMoyGentillesse(c.GetMoyGentillesse() + s.GetMoyGentillesse());
			c.SetNbTotalRendezVous(s.GetNbTotalRendezVous() + 1);
			
			if(s.GetNbRendezVousEnAttente() > 0)
				c.SetNbRendezVousEnAttente(s.GetNbRendezVousEnAttente()-1);
			
			stats.replace(i, c);
		}
	}

	if(!found) stats.append(c);

	StatistiquesClient::SaveStats(stats);
}

void CompteRenduRDV::retourAccueil()
{
	deleteLater();
	parentWidget()->show();
}

CompteRenduRDV::~CompteRenduRDV()
{}
